package com.fwx.inner_class;

/**
 * @author : fengwenxiang
 * @date : 2022/5/13 0:06
 * @description：内部类的复习使用
 */
/**1.成员内部类**/
public class OutClass_MemberInner {
    private int outerVar = 1;
    private int commonVar = 2;
    private static int outerStaticVar = 3;

    public void outerMethod(){
        System.out.println("我是外部类的outerMethod方法");
    }
    public static void outerStaticMethod(){
        System.out.println("我是外部类的outerStaticMethod方法");
    }
    /**成员内部类,如果设定私有访问修饰，提供对外获取内部类对象接口**/
    public class InnerClass{
        private int commonVar = 20;//注意这里的属性名与外部类属性名相同
        //private static int staticVar = 2020;//成员内部类中不能包含静态内容,除非加final修饰变成常量了
        /**访问外部类信息**/
        public void innerShow(){
            /**当和外部类冲突时，直接引用属性名是内部类的成员属性**/
            System.out.println("内部类commonVar : "+commonVar);
            /**内部类访问外部类属性[直接访问]**/
            System.out.println("outerVar : "+outerVar);
            /**访问外部类重名属性[重名时可通过 .this访问]**/
            System.out.println("外部类commonVar : "+OutClass_MemberInner.this.commonVar);
            System.out.println("外部类outerStaticVar : "+outerStaticVar);
            /**直接访问外部类的方法**/
            outerMethod();
            outerStaticMethod();
            //OutClass outerInstance = getOuterInstance();
            //outerInstance.outerShow();
        }
        /**内部类中获取外部类对象的引用**/
        public OutClass_MemberInner getOuterInstance(){
            return OutClass_MemberInner.this;
        }
    }

    /**外部类访问内部类信息**/
    public void outerShow(){
        InnerClass inner = new InnerClass();
        inner.innerShow();
    }
}
